package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import model.Servicio;
import controller.Sistema;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class AltaPlanAdicional extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;
	
	private AltaPlanAdicional instancia;
	private String mNombrePlan;
	private boolean mPermiteExcedente;
	
	private JComboBox comboBoxServicios;
	private JTextField textFieldCostoAdicional;
	private JTextField textFieldCantidad;
	
	private JLabel labelServicios;
	private JLabel labelCostoAdicional;
	private JLabel labelCantidad;
	
	private JButton buttonAceptar;
	private JButton buttonCancelar;
	private JButton buttonAgregar;	
	
	private ArrayList<String> servicios = new ArrayList<String>();
	private ArrayList<Float> costos = new ArrayList<Float>();
	private ArrayList<Float> cantidades = new ArrayList<Float>();	
	
	private Vector<String> servicioVector;
	private Vector<Float> costoVector;
	private Vector<Float> cantidadVector;

	public AltaPlanAdicional(final String nombrePlan, final boolean permiteExcedente) {
		super();
		initGUI();
		instancia = this;
		this.mNombrePlan = nombrePlan;
		this.mPermiteExcedente = permiteExcedente;
		
		this.setTitle("Alta Item Plan Adicional");
		{
			labelServicios = new JLabel();
			getContentPane().add(labelServicios);
			labelServicios.setText("Servicio");
			labelServicios.setBounds(45, 36, 116, 16);
		}
		{
			Vector<String> nombres = new Vector<String>();
			HashSet<Servicio> servicios = Sistema.getInstance().getServicios();
			Iterator<Servicio> itr = servicios.iterator();
			while (itr.hasNext()) {
				Servicio servicio = itr.next();
				nombres.add(servicio.getNombre());
			}

			nombres.add("service 1");
			nombres.add("service 2");
			nombres.add("service 3");

			ComboBoxModel ServiciosCmboxModel = new DefaultComboBoxModel(nombres);
			comboBoxServicios = new JComboBox();
			getContentPane().add(comboBoxServicios);
			comboBoxServicios.setModel(ServiciosCmboxModel);
			comboBoxServicios.setBounds(179, 33, 128, 23);
		}
		{
			buttonAgregar = new JButton();
			getContentPane().add(buttonAgregar);
			buttonAgregar.setText("Agregar");
			buttonAgregar.setBounds(51, 170, 88, 23);
			buttonAgregar.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					float fCosto = 0;
					float fCantidad = 0;
					
					if (validateFieldEmpty()) {
						if (!valiateIsFloat(textFieldCantidad.getText().trim()) || !valiateIsFloat(textFieldCostoAdicional.getText().trim())) {
							HelperTest.showMessage("Can't validate float");
						}
						else {
							String servicio = (String) comboBoxServicios.getSelectedItem();
							servicios.add(servicio);

							try {
								fCantidad = Float.parseFloat(textFieldCantidad.getText());
								cantidades.add(fCantidad);
							} catch (Exception e1) {
								e1.printStackTrace();
							}
							
							try {
								fCosto = Float.parseFloat(textFieldCostoAdicional.getText());
								costos.add(fCosto);
							} catch (Exception e1) {
								e1.printStackTrace();
							}
							limpiarCampos();							
						}
					}
				}
			});
		}
		{
			labelCostoAdicional = new JLabel();
			getContentPane().add(labelCostoAdicional);
			labelCostoAdicional.setText("Costo Adicional");
			labelCostoAdicional.setBounds(45, 78, 100, 16);
		}
		{
			textFieldCostoAdicional = new JTextField();
			getContentPane().add(textFieldCostoAdicional);
			textFieldCostoAdicional.setBounds(179, 75, 128, 23);
		}
		{
			labelCantidad = new JLabel();
			getContentPane().add(labelCantidad);
			labelCantidad.setText("Cantidad");
			labelCantidad.setBounds(45, 117, 116, 16);
		}
		{
			textFieldCantidad = new JTextField();
			getContentPane().add(textFieldCantidad);
			textFieldCantidad.setBounds(179, 114, 128, 23);
		}
		{
			buttonAceptar = new JButton();
			getContentPane().add(buttonAceptar);
			buttonAceptar.setText("Aceptar");
			buttonAceptar.setBounds(150, 170, 79, 23);
			buttonAceptar.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					servicioVector = new Vector(servicios);
					cantidadVector = new Vector(costos);
					costoVector = new Vector(cantidades);
					Sistema.getInstance().altaPlanAdicional(mNombrePlan, servicioVector, cantidadVector, costoVector, mPermiteExcedente);
				}
			} );
		}
		{
			buttonCancelar = new JButton();
			getContentPane().add(buttonCancelar);
			buttonCancelar.setText("Cancelar");
			buttonCancelar.setBounds(245, 170, 87, 23);
			buttonCancelar.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					AltaPlanGeneralAdicional app = new AltaPlanGeneralAdicional();
					app.setLocationRelativeTo(null);
					app.setVisible(true);
					instancia.setVisible(false);
				}
			});
		}
	}

	private boolean valiateIsFloat(String number) {
		if (number.length() > 0) {
			try {
				float f = Float.parseFloat(number);
				return true;
			} catch (Exception e) {
				return false;
			}
		}
		return false;
	}
	
	private boolean validateFieldEmpty() {
		if (textFieldCantidad != null && textFieldCantidad.getText().trim().length() > 0 && textFieldCostoAdicional != null && textFieldCostoAdicional.getText().trim().length() > 0) {
			return true;
		}
		HelperTest.showMessage("Complete All Fields");
		return false;
	}
		
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			pack();
			this.setSize(382, 266);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void limpiarCampos() {
		textFieldCantidad.setText(" ");
		textFieldCostoAdicional.setText(" ");
	}

}
